*Apache 2 [#r5421e34]

古い [[Apache 1:http://oku.edu.mie-u.ac.jp/~okumura/networking/apache.html]]
のページをとりあえず更新したものです。

**News [#n5e427e3]

- Apache 2.2.8 が出ました。

**はじめに [#o8455f31]

Apache はたいていの Linux などのディストリビューションに入っているはずですので,ソースからコンパイルする必要はありません。
ソースからのコンパイルは,最新版を追い求める人だけお試しください。

**ソースからのコンパイル [#kc55641c]

ソースコードは
[[The Apache Software Foundation:http://www.apache.org/]]
の
[[The Apache HTTP Server Project:http://httpd.apache.org/]]
で配布されています。ダウンロードは
[[適当なミラー:http://httpd.apache.org/download.cgi]]
から行いましょう(例えば
[[RingServer:http://www.dnsbalance.ring.gr.jp/]]
の
[[/pub/net/apache/httpd/:http://www.dnsbalance.ring.gr.jp/pub/net/apache/httpd/]]
にもミラーされています)。
Apache にはバージョン 1.x のものと 2.x のものがありますが,ここでは 2.x
のもの(httpd-2.X.YY.tar.gz といったファイル名)を使います。

すでに古い Apache がインストールされているなら消しておきます。 

 /etc/rc.d/init.d/httpd stop
 rpm -e apache mod_ssl

あらかじめユーザ www,グループ www を作っておきます(どんな名前でもかまいません。
最近の Vine Linux では apache/apache
というユーザ/グループがあるようですのでそれを流用するのがいいでしょう)。

:/etc/passwd|www:x:98:98:www:/:/bin/false
:/etc/group|www:x:98:

Vine Linux 4.1では apt-get install openssl-devel しておきます。

まずソースを展開してコンパイルします。
後で PHP を使うために Dynamic Shared Object の設定 --enable-so をしておきます。

 cd httpd-2.2.4
 CFLAGS="-O2" ./configure --enable-so --enable-auth-digest --enable-dav --enable-ssl --enable-rewrite
 make
 make install

デフォルトのインストール場所は /usr/local/apache2
以下になります(Apache 1.x では /usr/local/apache でした)。
場所を変えるには configure に --prefix=/opt/local/apache2
のようなオプションを付けます。

**httpd.conf の設定 [#i65396f0]

次に,/usr/local/apache2/conf にある httpd.conf を編集します。

 User daemon
 Group daemon

となっているところは,前にも書いたように,できれば www あるいは apache
といったユーザ/グループを作って,

 User www
 Group www

などとします。

ServerAdmin は適当なメールアドレスにします。
例えば

 ServerAdmin webmaster@example.ac.jp

として,webmaster を管理人の別名として登録するといいでしょう。

ServerName はホスト名です。たとえば

 ServerName www.example.ac.jp:80

とします。
実験的に自分のマシンで動かすなら 127.0.0.1 でもかまいません。

 <Directory "/usr/local/apache2/htdocs">

から

 </Directory>

の中で一般的な設定をします。最初は

 Options Indexes FollowSymLinks
 AllowOverride None

となっていますが,自由度を最大限に上げるには

 Options All
 AllowOverride All

とします。
All に加えて MultiViews オプションも付けると content negotiation
を自動で行いますが,パフォーマンスはかなり落ちます。
この用途には .var ファイルを使うほうがいいでしょう。
AllowOverride を All にするのは,後で .htaccess で自由に設定を変えるためです。

次の

 DirectoryIndex index.html

となっているところは,たとえば

 DirectoryIndex index.html index.htm index.php index.cgi index.pl index.rb index.html.var

といった具合にすると,index.html 以外のファイル名でも省略できるので,便利です。

 <FilesMatch "^\.ht">
     Order allow,deny
     Deny from all
 </FilesMatch>

は見せないファイルの設定です。同様に

 <FilesMatch "~$">
     Order allow,deny
     Deny from all
 </FilesMatch>


などとしておくとEmacsのバックアップファイルが見えてしまうことを防ぎます。

 CustomLog logs/access_log common

をコメントアウトして,代わりに

 CustomLog logs/access_log combined

とするとログファイルにuser agentやrefererの情報も入ります。

MIME type の不明なバイナリファイルがブラウザに表示されてしまうことを防ぐために

 DefaultType text/plain

を

 DefaultType application/octet-stream

にしておくといいかもしれません(場合によります)。

CGIを使うなら,

 #AddHandler cgi-script .cgi

は,コメントを外して,ついでに Perl や Ruby のために次のようにしておくと便利です。

 AddHandler cgi-script .cgi .pl .rb

PHP を使うなら,PHP インストール時に httpd.conf
が書き換えられて次のいずれかの行が追加されるはずです。

 LoadModule php4_module modules/libphp4.so
 LoadModule php5_module modules/libphp5.so

さらに次の2行がなければ追加しておきます。

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps

言語関係は 2.2 では extra/httpd-languages.conf に移りました。
ここでは LanguagePriority リストの先頭に ja を持っていきます。
なお,古い Apache では次の行がありましたが,これはコメントアウトしておかないと文字化けが起こります。

 AddDefaultCharset ISO-8859-1


**実行 [#jfe0991b]

起動,終了,再起動はそれぞれ

 /usr/local/apache2/bin/apachectl -k start
 /usr/local/apache2/bin/apachectl -k graceful-stop
 /usr/local/apache2/bin/apachectl -k graceful

です。
/etc/rc.d/rc.local の下のほうに

 /usr/local/apache2/bin/apachectl -k start

と書いておいてもいいのですが,今のVineなどRed Hat系の方式では次のようにします。

 cp build/rpm/httpd.init /etc/rc.d/init.d/httpd

ここで /etc/rc.d/init.d/httpd の中のパス名を適宜直します。例えば httpd.pid は /usr/local/apache2/logs
の中に入ります。

 /sbin/chkconfig --level 345 httpd on
 /etc/rc.d/init.d/httpd start

/etc/logrotate.d/apache2 は /var/log/httpd と /var/run
を /usr/local/apache2/logs に直しておきます。

**SSL [#m73dd07e]

SSL対応にするには,configure に --enable-ssl を付けます。
openssl,openssl-devel がインストールされていなければなりません。

 cd /usr/local/apache2/conf
 ln -s /etc/httpd/conf/ssl.crt .
 ln -s /etc/httpd/conf/ssl.key .

 /usr/local/apache2/bin/apachectl -k startssl

Apache 2.2 では startssl ではなく単に start とします。
これで一応できますが,ちゃんとした証明書が欲しいところです。
ここでは [[CAcert:http://www.cacert.org/]] という無料のCAで証明書を取得することにします。

上記の証明書でもいいのですが,最初からやってみます。

 cd /etc/httpd/conf  # Vineなら/etc/apache2/conf
 /usr/bin/openssl genrsa 1024 > ssl.key/server.key
 /usr/bin/openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr

いろいろ聞いてきます(実際にCAcertで使われるのはCommon Nameだけ):

 Country Name (2 letter code) [AU]:JP
 State or Province Name (full name) [Some-State]:Mie
 Locality Name (eg, city) []:Tsu
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mie University
 Organizational Unit Name (eg, section) []:Okumura Lab
 Common Name (eg, YOUR name) []:oku.edu.mie-u.ac.jp
 Email Address []:root@oku.edu.mie-u.ac.jp

残りはすべてEnterだけ。
この server.csr を [[CAcert:http://www.cacert.org/]]
に送れば無料で証明書を発行してもらえますので,それを ssl.crt/server.crt にしてApacheを再起動します。

別の手段として,自己署名証明書を作ってしまうことも考えられます。
もともとの server.crt も自己証明証明書ですが,名前等が正しくないので,次のように打ち込んで,名前等を直すことができます。

 openssl req -new -key ../ssl.key/server.key -x509 -days 365 -out server.crt


**WebDAV [#p7964285]

WebDAV は HTTP 上に構築された次世代のファイル共有プロトコルです。
.Mac の iDisk も AFS から WebDAV ベースに変更されました。

Apache 2 では ./configure に --enable-dav=yes 
を付けていれば,httpd.conf に次を追加するだけで WebDAV が使えます。

 <Location /dav>
   DAV on
 </Location>
 DAVLockDB /usr/local/apache2/var/DAVLock

/usr/local/apache2/htdocs/dav と /usr/local/apache2/var/ はユーザ www が書き込めるようにしておきます。
後者のディレクトリにはロックファイル DAVLock.dir,DAVLock.pag が入ります。

これで,Mac OS X なら Finder で「移動」→「サーバへ接続」で http://サーバ名/dav とすればつながります。

サーバ上の場所は /usr/local/apache2/htdocs/dav になります。
これが嫌なら次のようにして別の場所を指定できます。

 Alias /dav /path/to/somewhere

これだけでは誰でもアップロード/ダウンロードできてしまいますので,例えば次のようにダイジェスト認証を設定します。

 <Location /dav>
   DAV on
   AuthType Digest
   AuthName "DAV"
   AuthDigestFile /path/to/somefile
   Require valid-user
 </Location>

 /usr/local/apache2/bin/htdigest -c /path/to/somefile DAV someuser

と打ち込むと someuser さんのパスワードを聞いてきますので,2回打ち込みます。

これで Mac OS X なら日本語ファイル名(utf-8)を含め何の問題もないようです。
ドラッグ&ドロップやダブルクリックができます。
/Volumes/dav にマウントされますので,Emacs などでもローカルファイルと同じように編集できます。
Windows XP(マイネットワーク→ネットワークプレースを追加する)ではいろいろトラブルが生じるとのことです。

UNIX互換OSのコマンドラインで使えるクライアント
[[cadaver:http://www.webdav.org/cadaver/]]
があります。
ちょうど ftp コマンドのように使えて便利です。

***参考サイト [#la3a4280]

-[[WebDAV Resources:http://www.webdav.org/]]
-[[WebDAV Resources JP:http://webdav.todo.gr.jp/]]
(ここで配布されている mod_encoding を使うと Windows から日本語ファイル名が使えるようになります)

**個人ごとのサイトがうまく公開できないとき [#r78e75e6]

個人のホームディレクトリに public_html ディレクトリを作り,その中に index.html
を入れてうまくいかない場合は,たいていホームディレクトリのパーミッションが悪いのでしょう。
700ではうまくいきません。
少なくとも 701 にしておく必要があります。

これ以外に,SELinuxが設定されている場合は,

 restorecon -R /home

それでも駄目なら

 chcon -R -h -t httpd_sys_content_t /home

のようなことをする必要があるかもしれません。

あと,suEXECがオンになっている最近の設定で,番号の低いグループでCGIが動かないといったトラブルが発生するようです。suEXECをオフにするには,/usr/sbin/suexec を別の名前に変えて,apachectl restart します。
あと,suEXECがオンになっている最近の設定で,番号の低いグループでCGIが動かないといったトラブルが発生するようです。suEXECをオフにするには,/usr/sbin/suexec を別の名前に変えて,apachectl restart します。Vine Linux 4.* では /usr/lib/apache2/suexec を削除またはリネームして /usr/sbin/apache2ctl restart します。これをしても,apt-get で更新した際にまた入ってしまうことがあり,注意を要します。


*** 参考サイト [#t433b7c3]
http://www.srvjp.net/?cx=003329386177465831517%3Ajdvs2yb580y&q=apache&sa=Search&cof=FORID%3A9#990